package main

import (
	"fmt"
	"log"
	"net/http"
	"os"
)

var (
	url = "http://www.baidu.com111"
)

/*
异常处理，不是语法，是常见的处理思路
*/
func main() {
	//fmt.Println(test1())
	//fmt.Println(test2())
	test3()
}

// 1.传播错误，不处理，直接返回异常
func test1() (resp *http.Response, err error) {
	resp, err = http.Get(url)
	if err != nil {
		return nil, err
	} else {
		return resp, err
	}
}

// 2.重试
func test2() (resp *http.Response, err error) {
	for i := 0; i < 3; i++ {
		resp, err = http.Get(url)
		if err != nil {
			// 使用Fatalf 或中断方法，内部调用os.Exit，退出线程
			//log.Fatalf("发送异常:", err)
			log.Printf("发生异常, 第%d次, 异常信息：%s", i, err)
		} else {
			return resp, err
		}
	}
	return nil, err
}

// 3.处理异常后，退出程序
func test3() {
	resp, err := http.Get(url)
	if err != nil {
		fmt.Fprintf(os.Stderr, "Site is down: %v\n", err)
		os.Exit(1)
	}
	fmt.Println(resp)
}
